↳ Prolog
↳ PrologToPiTRSProof
front_in_ga(void, []) → front_out_ga(void, [])
front_in_ga(tree(X, void, void), .(X, [])) → front_out_ga(tree(X, void, void), .(X, []))
front_in_ga(tree(X, L, R), Xs) → U1_ga(X, L, R, Xs, front_in_ga(L, Ls))
U1_ga(X, L, R, Xs, front_out_ga(L, Ls)) → U2_ga(X, L, R, Xs, Ls, front_in_ga(R, Rs))
U2_ga(X, L, R, Xs, Ls, front_out_ga(R, Rs)) → U3_ga(X, L, R, Xs, app_in_gga(Ls, Rs, Xs))
app_in_gga([], X, X) → app_out_gga([], X, X)
app_in_gga(.(X, Xs), Ys, .(X, Zs)) → U4_gga(X, Xs, Ys, Zs, app_in_gga(Xs, Ys, Zs))
U4_gga(X, Xs, Ys, Zs, app_out_gga(Xs, Ys, Zs)) → app_out_gga(.(X, Xs), Ys, .(X, Zs))
U3_ga(X, L, R, Xs, app_out_gga(Ls, Rs, Xs)) → front_out_ga(tree(X, L, R), Xs)
Infinitary Constructor Rewriting Termination of PiTRS implies Termination of Prolog
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
front_in_ga(void, []) → front_out_ga(void, [])
front_in_ga(tree(X, void, void), .(X, [])) → front_out_ga(tree(X, void, void), .(X, []))
front_in_ga(tree(X, L, R), Xs) → U1_ga(X, L, R, Xs, front_in_ga(L, Ls))
U1_ga(X, L, R, Xs, front_out_ga(L, Ls)) → U2_ga(X, L, R, Xs, Ls, front_in_ga(R, Rs))
U2_ga(X, L, R, Xs, Ls, front_out_ga(R, Rs)) → U3_ga(X, L, R, Xs, app_in_gga(Ls, Rs, Xs))
app_in_gga([], X, X) → app_out_gga([], X, X)
app_in_gga(.(X, Xs), Ys, .(X, Zs)) → U4_gga(X, Xs, Ys, Zs, app_in_gga(Xs, Ys, Zs))
U4_gga(X, Xs, Ys, Zs, app_out_gga(Xs, Ys, Zs)) → app_out_gga(.(X, Xs), Ys, .(X, Zs))
U3_ga(X, L, R, Xs, app_out_gga(Ls, Rs, Xs)) → front_out_ga(tree(X, L, R), Xs)
FRONT_IN_GA(tree(X, L, R), Xs) → U1_GA(X, L, R, Xs, front_in_ga(L, Ls))
FRONT_IN_GA(tree(X, L, R), Xs) → FRONT_IN_GA(L, Ls)
U1_GA(X, L, R, Xs, front_out_ga(L, Ls)) → U2_GA(X, L, R, Xs, Ls, front_in_ga(R, Rs))
U1_GA(X, L, R, Xs, front_out_ga(L, Ls)) → FRONT_IN_GA(R, Rs)
U2_GA(X, L, R, Xs, Ls, front_out_ga(R, Rs)) → U3_GA(X, L, R, Xs, app_in_gga(Ls, Rs, Xs))
U2_GA(X, L, R, Xs, Ls, front_out_ga(R, Rs)) → APP_IN_GGA(Ls, Rs, Xs)
APP_IN_GGA(.(X, Xs), Ys, .(X, Zs)) → U4_GGA(X, Xs, Ys, Zs, app_in_gga(Xs, Ys, Zs))
APP_IN_GGA(.(X, Xs), Ys, .(X, Zs)) → APP_IN_GGA(Xs, Ys, Zs)
front_in_ga(void, []) → front_out_ga(void, [])
front_in_ga(tree(X, void, void), .(X, [])) → front_out_ga(tree(X, void, void), .(X, []))
front_in_ga(tree(X, L, R), Xs) → U1_ga(X, L, R, Xs, front_in_ga(L, Ls))
U1_ga(X, L, R, Xs, front_out_ga(L, Ls)) → U2_ga(X, L, R, Xs, Ls, front_in_ga(R, Rs))
U2_ga(X, L, R, Xs, Ls, front_out_ga(R, Rs)) → U3_ga(X, L, R, Xs, app_in_gga(Ls, Rs, Xs))
app_in_gga([], X, X) → app_out_gga([], X, X)
app_in_gga(.(X, Xs), Ys, .(X, Zs)) → U4_gga(X, Xs, Ys, Zs, app_in_gga(Xs, Ys, Zs))
U4_gga(X, Xs, Ys, Zs, app_out_gga(Xs, Ys, Zs)) → app_out_gga(.(X, Xs), Ys, .(X, Zs))
U3_ga(X, L, R, Xs, app_out_gga(Ls, Rs, Xs)) → front_out_ga(tree(X, L, R), Xs)
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
FRONT_IN_GA(tree(X, L, R), Xs) → U1_GA(X, L, R, Xs, front_in_ga(L, Ls))
FRONT_IN_GA(tree(X, L, R), Xs) → FRONT_IN_GA(L, Ls)
U1_GA(X, L, R, Xs, front_out_ga(L, Ls)) → U2_GA(X, L, R, Xs, Ls, front_in_ga(R, Rs))
U1_GA(X, L, R, Xs, front_out_ga(L, Ls)) → FRONT_IN_GA(R, Rs)
U2_GA(X, L, R, Xs, Ls, front_out_ga(R, Rs)) → U3_GA(X, L, R, Xs, app_in_gga(Ls, Rs, Xs))
U2_GA(X, L, R, Xs, Ls, front_out_ga(R, Rs)) → APP_IN_GGA(Ls, Rs, Xs)
APP_IN_GGA(.(X, Xs), Ys, .(X, Zs)) → U4_GGA(X, Xs, Ys, Zs, app_in_gga(Xs, Ys, Zs))
APP_IN_GGA(.(X, Xs), Ys, .(X, Zs)) → APP_IN_GGA(Xs, Ys, Zs)
front_in_ga(void, []) → front_out_ga(void, [])
front_in_ga(tree(X, void, void), .(X, [])) → front_out_ga(tree(X, void, void), .(X, []))
front_in_ga(tree(X, L, R), Xs) → U1_ga(X, L, R, Xs, front_in_ga(L, Ls))
U1_ga(X, L, R, Xs, front_out_ga(L, Ls)) → U2_ga(X, L, R, Xs, Ls, front_in_ga(R, Rs))
U2_ga(X, L, R, Xs, Ls, front_out_ga(R, Rs)) → U3_ga(X, L, R, Xs, app_in_gga(Ls, Rs, Xs))
app_in_gga([], X, X) → app_out_gga([], X, X)
app_in_gga(.(X, Xs), Ys, .(X, Zs)) → U4_gga(X, Xs, Ys, Zs, app_in_gga(Xs, Ys, Zs))
U4_gga(X, Xs, Ys, Zs, app_out_gga(Xs, Ys, Zs)) → app_out_gga(.(X, Xs), Ys, .(X, Zs))
U3_ga(X, L, R, Xs, app_out_gga(Ls, Rs, Xs)) → front_out_ga(tree(X, L, R), Xs)
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ UsableRulesProof
↳ PiDP
APP_IN_GGA(.(X, Xs), Ys, .(X, Zs)) → APP_IN_GGA(Xs, Ys, Zs)
front_in_ga(void, []) → front_out_ga(void, [])
front_in_ga(tree(X, void, void), .(X, [])) → front_out_ga(tree(X, void, void), .(X, []))
front_in_ga(tree(X, L, R), Xs) → U1_ga(X, L, R, Xs, front_in_ga(L, Ls))
U1_ga(X, L, R, Xs, front_out_ga(L, Ls)) → U2_ga(X, L, R, Xs, Ls, front_in_ga(R, Rs))
U2_ga(X, L, R, Xs, Ls, front_out_ga(R, Rs)) → U3_ga(X, L, R, Xs, app_in_gga(Ls, Rs, Xs))
app_in_gga([], X, X) → app_out_gga([], X, X)
app_in_gga(.(X, Xs), Ys, .(X, Zs)) → U4_gga(X, Xs, Ys, Zs, app_in_gga(Xs, Ys, Zs))
U4_gga(X, Xs, Ys, Zs, app_out_gga(Xs, Ys, Zs)) → app_out_gga(.(X, Xs), Ys, .(X, Zs))
U3_ga(X, L, R, Xs, app_out_gga(Ls, Rs, Xs)) → front_out_ga(tree(X, L, R), Xs)
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
↳ PiDP
APP_IN_GGA(.(X, Xs), Ys, .(X, Zs)) → APP_IN_GGA(Xs, Ys, Zs)
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
↳ QDP
↳ QDPSizeChangeProof
↳ PiDP
APP_IN_GGA(.(X, Xs), Ys) → APP_IN_GGA(Xs, Ys)
From the DPs we obtained the following set of size-change graphs:
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ PiDP
↳ PiDPToQDPProof
FRONT_IN_GA(tree(X, L, R), Xs) → FRONT_IN_GA(L, Ls)
U1_GA(X, L, R, Xs, front_out_ga(L, Ls)) → FRONT_IN_GA(R, Rs)
FRONT_IN_GA(tree(X, L, R), Xs) → U1_GA(X, L, R, Xs, front_in_ga(L, Ls))
front_in_ga(void, []) → front_out_ga(void, [])
front_in_ga(tree(X, void, void), .(X, [])) → front_out_ga(tree(X, void, void), .(X, []))
front_in_ga(tree(X, L, R), Xs) → U1_ga(X, L, R, Xs, front_in_ga(L, Ls))
U1_ga(X, L, R, Xs, front_out_ga(L, Ls)) → U2_ga(X, L, R, Xs, Ls, front_in_ga(R, Rs))
U2_ga(X, L, R, Xs, Ls, front_out_ga(R, Rs)) → U3_ga(X, L, R, Xs, app_in_gga(Ls, Rs, Xs))
app_in_gga([], X, X) → app_out_gga([], X, X)
app_in_gga(.(X, Xs), Ys, .(X, Zs)) → U4_gga(X, Xs, Ys, Zs, app_in_gga(Xs, Ys, Zs))
U4_gga(X, Xs, Ys, Zs, app_out_gga(Xs, Ys, Zs)) → app_out_gga(.(X, Xs), Ys, .(X, Zs))
U3_ga(X, L, R, Xs, app_out_gga(Ls, Rs, Xs)) → front_out_ga(tree(X, L, R), Xs)
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ PiDP
↳ PiDPToQDPProof
↳ QDP
↳ QDPSizeChangeProof
FRONT_IN_GA(tree(X, L, R)) → FRONT_IN_GA(L)
U1_GA(R, front_out_ga(Ls)) → FRONT_IN_GA(R)
FRONT_IN_GA(tree(X, L, R)) → U1_GA(R, front_in_ga(L))
front_in_ga(void) → front_out_ga([])
front_in_ga(tree(X, void, void)) → front_out_ga(.(X, []))
front_in_ga(tree(X, L, R)) → U1_ga(R, front_in_ga(L))
U1_ga(R, front_out_ga(Ls)) → U2_ga(Ls, front_in_ga(R))
U2_ga(Ls, front_out_ga(Rs)) → U3_ga(app_in_gga(Ls, Rs))
app_in_gga([], X) → app_out_gga(X)
app_in_gga(.(X, Xs), Ys) → U4_gga(X, app_in_gga(Xs, Ys))
U4_gga(X, app_out_gga(Zs)) → app_out_gga(.(X, Zs))
U3_ga(app_out_gga(Xs)) → front_out_ga(Xs)
front_in_ga(x0)
U1_ga(x0, x1)
U2_ga(x0, x1)
app_in_gga(x0, x1)
U4_gga(x0, x1)
U3_ga(x0)
From the DPs we obtained the following set of size-change graphs: